package net.linku.annotation.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import net.linku.annotation.ChangeRecordEnums;

/**
 * 用于记录业务变更的值对象类。
 * <p>
 * 该类包含了变更记录所需的业务信息、变更前后数据、变更类型以及变更描述。
 * </p>
 *
 * @param <T> 泛型参数，表示变更前后记录的数据类型
 *
 * @author SilenceTian
 * @date 2024/7/21
 */
@Data
@Builder
@AllArgsConstructor // 添加该注解以生成包含所有字段的公共构造方法
public class ChangeRecordBizVO<T> {

    /**
     * 业务标识符，用于区分不同的业务类型。
     * <p>
     * 例如，可以是订单 ID、用户 ID 等。
     * </p>
     */
    private String businessId;

    /**
     * 业务类型枚举，表示该变更记录所属的业务类别。
     * <p>
     * 参考 {@link ChangeRecordEnums.TYPE}
     * </p>
     */
    private ChangeRecordEnums.TYPE businessTypeEnums;

    /**
     * 动作类型枚举，表示在变更过程中执行的操作类型。
     * <p>
     * 参考 {@link ChangeRecordEnums.ACTION}
     * </p>
     */
    private ChangeRecordEnums.ACTION actionEnums;

    /**
     * 变更前的数据记录。
     * <p>
     * 该数据代表在变更操作前的状态。
     * </p>
     */
    private T beforeData;

    /**
     * 变更后的数据记录。
     * <p>
     * 该数据代表在变更操作后的状态。
     * </p>
     */
    private T afterData;

    /**
     * 变更类型枚举，表示变更的具体类别。
     * <p>
     * 参考 {@link ChangeRecordEnums.CHANGE_TYPE}
     * </p>
     */
    private ChangeRecordEnums.CHANGE_TYPE changeType;

    /**
     * 变更描述，简要说明变更的内容或原因。
     * <p>
     * 例如，“修改了用户的联系方式”。
     * </p>
     */
    private String changeDesc;
    /**
     * 操作来源
     */
    private String changeSourceDesc;

}
